[2025-07-08] XML
🦥 본문
XML
정의
eXtensible Markup Language. 데이터를 구조화하고 전송하기 위해 만들어진 마크업 언어
특징
- 확장적 : 사용자가 직접 태그를 정의할 수 있음
- 계층적 : 트리 형태의 계층적 구조를 통해 복잡한 데이터도 표현 가능.
- 루트로 시작하여 자식 요소들이 있음
- 독립적 : 시스템에 상관없이 동일한 형식으로 동작. 다른 시스템끼리 쉽게 데이터를 교환할 수 있음
- 텍스트 기반 : 사람도 읽을 수 있는 유니코드 문자로만 이루어짐.
목적
- 데이터 저장 : 구성 정보를 파일로 저장
- 데이터 전송 : 환경에 독립적이기 때문에 데이터 주고받을 때 사용. 호환성 보장
구조
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<library>
<book>
<title>어린 왕자</title>
<author>앙투안 드 생텍쥐페리</author>
<year>1943</year>
<price>12000</price>
</book>
<book>
<title>해리 포터</title>
<author>J.K. 롤링</author>
<year>1997</year>
<price>15000</price>
</book>
</library>
-
태그를 사용하여 XML 문서임을 명시. 선언부 - version : XML 버전
- encoding : XML 문서의 문자셋
- standalone : 외부 DTD 문서의 의존 여부. Yes or NO
DTD
- XML 문서의 구조, 요소, 속성이 어떤 식으로 배치되어야 하는지를 정의하는 문서
- 예시) 내부 DTD
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>윤서</to>
<from>세은</from>
<heading>안녕</heading>
<body>오늘도 힘내!</body>
</note>
- 예시) 외부 DTD
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>윤서</to>
<from>세은</from>
<heading>하이</heading>
<body>잘자요~</body>
</note>
// note.dtd
<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
- 예시) XXE : 루트 요소는 data이며 DTD를 내부에 정의. xxe라는 엔티티를 정의하고 외부 파일 경로를 참조. 이후 XML 문서 본문에서 &xxe를 사용하면 해당 파일의 내용을 읽어와 삽입
<?xml version="1.0"?>
<!DOCTYPE data [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<data>&xxe;</data>
Leave a comment